package com.itheima.homework;

import sun.rmi.log.LogInputStream;

import java.util.ArrayList;

/**题目1
 *- 请按上述要求定义类，并实现继承关系即可(不需要定义类成员，定义空类表示关系即可)
 * - 请按以下格式和要求定义测试类和方法：
 */
public class Test1 {

    class Person{}
    class Student extends Person{}
    class JavaStudent extends Student{}
    class UIStudent extends Student{}
    class Teacher extends Person{}
    class JavaTeacher extends Teacher{}
    class UITeacher extends Teacher{}

    public static void main(String[] args){
        ArrayList<String> list1 = new ArrayList<>();
        ArrayList<Person> list2 = new ArrayList<>();
        ArrayList<Student> list3 = new ArrayList<>();
        ArrayList<JavaStudent> list4 = new ArrayList<>();
        ArrayList<UIStudent> list5 = new ArrayList<>();
        ArrayList<Teacher> list6 = new ArrayList<>();
        ArrayList<JavaTeacher> list7 = new ArrayList<>();
        ArrayList<UITeacher> list8 = new ArrayList<>();
        //请测试print1()方法能接收哪些集合
//        print1(list1);
        //请测试print2()方法能接收哪些集合
        print2(list2);
        print2(list3);
        print2(list4);
        print2(list5);
        print2(list6);
        print2(list7);
        print2(list8);
        //请测试print3()方法能接收哪些集合
        print3(list3);
        print3(list4);
        print3(list5);
        //请测试print4()方法能接收哪些集合
        print4(list4);
        print4(list3);
        print4(list2);
        //注意 : 泛型不支持多态 !!!
        //print1(list1);// 报错 , 泛型不支持多态
    }

    //要求：参数可以接收任何泛型的ArrayList参数
    public static void print1(ArrayList<Object> list){

    }
    //要求：参数可以接收任何Person及其子类泛型的ArrayList参数
    public static void print2(ArrayList<? extends Person> list){
    }
    //要求：参数可以接收任何Student及其子类泛型的ArrayList参数
    public static void print3(ArrayList<? extends Student> list){
    }
    //要求：参数可以接收任何Java学员，及其父类泛型的ArrayList参数
    public static void print4(ArrayList<? super JavaStudent> list){
    }


}
